package indi.storyoftime.rasite.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 地理相关工具类
 */
public class GeoUtil {

    public static void main(String[] args) {
        String regex = "(^[0-9.]+).*";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher("450.75 metres");
        System.out.println(matcher.matches());
        System.out.println(matcher.group(1));
    }

    /**
     * 经纬度的度分秒表示法转换成小数表示法。
     * @param degree 度分秒，如 30° 46' 43.32"。
     * @return 小数表示的经纬度
     */
    public static Double degreeToDecimal(String degree) {
        if (degree == null) {
            return null;
        }

        String regex = "\\s*(\\d{0,3})°\\s*(\\d{0,3})'\\s*([0-9.]+)\"";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(degree);
        if(matcher.matches()) {
            double degreeNumber = Double.parseDouble(matcher.group(1));
            double minuteNumber = Double.parseDouble(matcher.group(2));
            double secondNumber = Double.parseDouble(matcher.group(3));
            return degreeNumber + minuteNumber / 60 + secondNumber / 3600;
        } else {
            return null;
        }
    }

    /**
     * 经纬度的小数表示法转换成度分秒表示法。TODO
     * @return 度分秒，如 30° 46' 43.32"。
     */
    public static String decimalToDegree(Double decimal) {
        return "";
    }

    /**
     * 提取开头为数字的带单位的字符串包含的数值。
     */
    public static Double parseValue(String str) {
        if(str == null){
            return null;
        }

        String regex = "(^[0-9.]+).*";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        if(matcher.matches()) {
            return Double.parseDouble(matcher.group(1));
        } else {
            return null;
        }
    }
}
